<?php
class vote extends module{

	var $VoteType=array(1=>"radio", 2=>"checkbox");
	var $LineWidth; // ширина линии в результатах голосования
	function content_init()
	{
		global $common_data_server;
		$this->LineWidth=$this->view_param['line_width'];
 		$action=$this->q_param['action'];
		$today=date("Ymd")."000000";
		$query="select V.* "
			."from VOTE V, CONTENT_MAP CM "
			."where  CM.INF_BLOCK_ID='".$this->block_id."' "
			."and  V.CONTENT_ID=CM.CONTENT_ID "
			."and  V.LANG_ID='".$this->lang_id."' "
			."and  V.VERSION='".$this->version."' "
			."and  V.START_DATE<='".$today."' "
			."and  V.END_DATE>='".$today."' "
			."order by V.START_DATE desc ";
		$vote_select=sql_select($query);

		// Сценарий
		if ($this->view_param["use_variant"]=="archive" or $action=="show")
		{
				if(intval($this->q_param["vid"])>0) $this->results(); // результаты
				else $this->archive(); // архив
		}
		else
		{
				if ($action=="vote") $this->register_vote($vote_select); // обработать голос
				else  $this->form($vote_select); // форма опроса
		}
	}
	
	// форма опроса
	function form($vote_select)
	{
		global $common_data_server;
		$template=$common_data_server."module_templates/vote/".$this->view_param["template"]."/form.vtmpl";
		if(file_exists($template))
		{
			$vtmpl = new  VlibTemplate($template);
			if($_COOKIE["Vote_".$vote_select[0]['CONTENT_ID']]==1) $vtmpl->SetVar('IS_VOTED', 1);
			$vtmpl->SetVar("tarea_id", $this->tarea_id);
			$vtmpl->SetVar("results_link", $this->go_to_page($this->view_param['archive_page'])."?".make_query_string(array("action".$this->getTAreaId($this->view_param['archive_page'])=>"show", "vid".$this->getTAreaId($this->view_param['archive_page'])=>$vote_select[0]['CONTENT_ID'])));
			$vtmpl->SetVar("archive_link", $this->go_to_page($this->view_param['archive_page'])."?".make_query_string(array("action".$this->getTAreaId($this->view_param['archive_page'])=>"show")));
			$vtmpl->setVar("TITLE", $vote_select[0]['TITLE']);
			$vtmpl->setVar("VOTETYPE", $this->VoteType[$vote_select[0]['VOTETYPE']]);
			if($vote_select[0]['RESULTS']==2 or ($_COOKIE["Vote_".$vote_select[0]['CONTENT_ID']]==1 and $vote_select[0]['RESULTS']==1)) $vtmpl->setVar("CAN_SEE", 1);
			$answer_select=sql_select("select * from VOTE_ANSWER where CONTENT_ID='".$vote_select[0]['CONTENT_ID']."' order by  ANSWER_ORDER asc");
			$vtmpl->setLoop("ANSWER", $answer_select);
			$this->body.=$vtmpl->grab();
		}
		else print "Не найден файл ".$template;
	}

	// Обработать голос
	function register_vote($vote_select)
	{
		$answer=$this->q_param['answer'];
		
		if(isset($answer) and $_COOKIE["Vote_".$vote_select[0]['CONTENT_ID']]!=1) // был подан "не пустой" голос и на этот вопрос еще не голосовал
		{
			$Answer=(is_array($answer)?$answer:array($answer=>1));
			foreach($Answer as $key=>$v)
			{
				$answer_select=sql_select("select * from VOTE_ANSWER where CONTENT_ID='".$vote_select[0]['CONTENT_ID']."' and VOTE_ANSWER_ID='".$key."' ");
				// увеличиваем количество голосов по каждому из выбранных ответов
				update_record_with_type('VOTE_ANSWER',
						array( 
										array('name' => 'ANSWER_COUNT', 'value' => $answer_select[0]['ANSWER_COUNT']+1)
									),
						array(	
										array("name"=>"CONTENT_ID","value"=>$vote_select[0]['CONTENT_ID']),
										array("name"=>"VOTE_ANSWER_ID","value"=>$key)
									)
						);
			}
			// увеличиваем общее количество голосов
			update_record_with_type('VOTE',
					array( 
									array('name' => 'FILL_COUNT', 'value' => $vote_select[0]['FILL_COUNT']+1)
								),
					array(	
									array("name"=>"CONTENT_ID","value"=>$vote_select[0]['CONTENT_ID']),
								)
					);
			// ставим куку на 100 дней
			setcookie("Vote_".$vote_select[0]['CONTENT_ID'], 1, time()+100*24*60*60, "/", $_SERVER['HTTP_HOST']);
		}
			// если показывать рез-ты, то уходим в архив
			if ($vote_select[0]['RESULTS']<>0) header("Location: ".$this->go_to_page($this->view_param['archive_page'])."?".make_query_string(array("action".$this->getTAreaId($this->view_param['archive_page'])=>"show" , "vid".$this->getTAreaId($this->view_param['archive_page'])=>$vote_select[0]['CONTENT_ID'])));
			// иначе возвращаемся туда, откуда пришли
			else header("Location: ".$_SERVER['HTTP_REFERER']);
	}

	// Архив опросов
	function archive()
	{
		global $common_data_server;
		$template=$common_data_server."module_templates/vote/".$this->view_param["template"]."/archive.vtmpl";
		if(file_exists($template))
		{
			$vtmpl = new  VlibTemplate($template);
			$today=date("Ymd")."000000";
		   	$from=intval($this->q_param["from"]);
			if($from<=0)$from=0;
				else $from--;
			$query="select V.* "
				."from VOTE V, CONTENT_MAP CM "
				."where  CM.INF_BLOCK_ID=".$this->block_id." "
				."and  V.CONTENT_ID=CM.CONTENT_ID "
				."and  V.LANG_ID=".$this->lang_id." "
				."and  V.VERSION=".$this->version." "
				."and  V.END_DATE<".$today." "
				."order by END_DATE desc "
				."limit ".$from*$this->view_param['per_page'].", ".$this->view_param['per_page']." ";
			$archive_select=sql_select($query);
			
			for($i=0; $i<count($archive_select); $i++) // приводим даты в человеческий вид
			{
				$archive_select[$i]['STARTDATE']=substr($archive_select[$i]['START_DATE'], 6,2).".".substr($archive_select[$i]['START_DATE'], 4,2).".".substr($archive_select[$i]['START_DATE'], 0,4);
				$archive_select[$i]['ENDDATE']=substr($archive_select[$i]['END_DATE'], 6,2).".".substr($archive_select[$i]['END_DATE'], 4,2).".".substr($archive_select[$i]['END_DATE'], 0,4);
				$archive_select[$i]['details_link']="index.php?".make_query_string(array("vid".$this->tarea_id=>$archive_select[$i]['CONTENT_ID']));
			}
			$vtmpl->setLoop("ARCHIVE", $archive_select);
			
       	    $pager=$this->lister_init($where);
			$vtmpl->setVar("PAGER", $pager);
			$this->body.=$vtmpl->grab();
		}
		else print "Не найден файл ".$template;
	}

	// Результаты  опросов
	function results()
	{
		global $common_data_server;
		$vid=intval($this->q_param["vid"]);
		$today=date("Ymd")."000000";
		$query="select V.* "
			."from VOTE V, CONTENT_MAP CM "
			."where  CM.INF_BLOCK_ID=".$this->block_id." "
			."and  V.CONTENT_ID=CM.CONTENT_ID "
			."and  V.LANG_ID=".$this->lang_id." "
			."and  V.VERSION=".$this->version." "
			."and  V.CONTENT_ID=".$vid." ";
		$question_select=sql_select($query);
		$template=$common_data_server."module_templates/vote/".$this->view_param["template"]."/results.vtmpl";
		if(file_exists($template))
		{
			$vtmpl = new  VlibTemplate($template);
			$vtmpl ->SetVar("TITLE", $question_select[0]['TITLE']);
			
			// если Результаты текущего опроса="выводить", не проголосовал и опрос не закончен
			// если Результаты текущего опроса="не выводить" и опрос не закончен
			// то результаты не выводить
			if(  ($today<=$question_select[0]['END_DATE']  and $question_select[0]['RESULTS']==1 and $_COOKIE["Vote_".$question_select[0]['CONTENT_ID']]<>1) or ( $today<=$question_select[0]['END_DATE']  and $question_select[0]['RESULTS']==0) )
			{
				$vtmpl->SetVar("IS_SHOW", 0);
			}
			// вывести результаты
			else
			{
				$vtmpl->SetVar("IS_SHOW", 1);
				$results_query=sql_select("select * from VOTE_ANSWER where CONTENT_ID='".$vid."' order by ANSWER_ORDER asc");
				for($i=0; $i<count($results_query); $i++)
				{
					$Sum+=$results_query[$i]['ANSWER_COUNT']; // сумма голосов
					if ($MaxCount<$results_query[$i]['ANSWER_COUNT'])  $MaxCount=$results_query[$i]['ANSWER_COUNT']; // максимальное значение
				}
				
				for($i=0; $i<count($results_query); $i++)
				{
					if($question_select[0]['VOTETYPE']==1)
					{
						// Процент для варианта "один ответ"
						$results_query[$i]['PERCENT']=($Sum>0 ? round(100*$results_query[$i]['ANSWER_COUNT']/$Sum,2):"0");
					}
					else
					{
						// Процент для варианта "много ответов"
						$results_query[$i]['PERCENT']=($question_select[0]['FILL_COUNT']>0 ? round(100*$results_query[$i]['ANSWER_COUNT']/$question_select[0]['FILL_COUNT'],2):"0");
					}

					$width=(intval($MaxCount>0 ? $this->LineWidth*$results_query[$i]['ANSWER_COUNT']/$MaxCount:0)); // Ширина полоски
					$results_query[$i]['WIDTH']=($width?$width:1);
				}
				
				if($question_select[0]['VOTETYPE']==1){
					$all=$Sum;
				}else{
					$all=$question_select[0]['FILL_COUNT'];
				}
				if(!$all)$all="0";
				$vtmpl->SetVar("VOTES", $all);

				$vtmpl->SetLoop("RESULTS", $results_query);
			}
			$this->body.=$vtmpl->grab();
		}
		else print "Не найден файл ".$template;
	}

	function lister_init($where)
	{
		global $common_data_server;
		$today=date("Ymd")."000000";
	   	$from=intval($this->q_param["from"]);
    	if($from<=0)$from=0;
      		else $from--;
		$count_row=sql_select("select COUNT(*) from VOTE V, CONTENT_MAP CM where  CM.INF_BLOCK_ID=".$this->block_id." and  V.CONTENT_ID=CM.CONTENT_ID and  V.LANG_ID=".$this->lang_id." and  V.VERSION=".$this->version." and  V.END_DATE<".$today);
		if($count_row[0][0]>$this->view_param["per_page"])
		return page_navigation($this->view_param["per_page"],$count_row[0][0], "from".$this->tarea_id, $common_data_server."module_templates/vote/".$this->view_param["template"]."/pager.vtmpl");
	}
	
#........................................................................................ 
	function get_hash_code(){return 0;}
#........................................................................................ 
}
?>